// 表示一个用户会话。它保存会话数据并管理会话的生命周期

#pragma once
#include <string>
#include <memory>
#include <unordered_map>
#include <chrono>
namespace http
{
    namespace session
    {
        class SessionManager;
        class Session : public std::enable_shared_from_this<Session> // 继承自std::enable_shared_from_this<Session>，使得Session对象可以被shared_ptr管理
        {
        private:
            std::string _session_id; // 会话ID
            std::unordered_map<std::string, std::string> _session_data; // 会话数据
            int _max_age; // 会话最大存活时间
            std::chrono::system_clock::time_point _expire_time; // 会话创建时间戳+最大存活时间 会话过期时间
            SessionManager *_session_manager; // 会话管理器
        public:
            Session(const std::string &session_id, SessionManager *session_manager = nullptr, int max_age = 3600);//默认1小时过期
            const std::string &getSessionId() const;

            bool isExpired() const; // 判断会话是否过期
            void Refresh(); // 刷新会话过期时间
            void SetManager(SessionManager *session_manager); // 设置会话管理器
            void Set(const std::string &key, const std::string &value); // 设置会话数据
            const std::string &Get(const std::string &key) const; // 获取会话数据
            void Remove(const std::string &key); // 删除会话数据
            void Clear(); // 清空会话数据
        };
    }
}